﻿using Architecture.BusinessLayer;
using LASLogic.BusinessLayer.DataModel;
using LASLogic.DataLayer.Implementor;

namespace LASLogic.BusinessLayer.Requestor
{
    public class UserRequestor : IRequestor
    {
        #region Singleton

        private UserRequestor()
        {
            
        }

        /// <summary>
        /// Única instancia de esta clase
        /// </summary>
        private static UserRequestor _instance;

        /// <summary>
        /// Método para implementar el patrón de Singleton
        /// </summary>
        /// <returns>Instancia única de la clase</returns>
        public static UserRequestor GetInstance()
        {
            if (_instance == null)
                _instance = new UserRequestor();
            return _instance;
        }

        #endregion

        #region Public Methods

        /// <summary>
        /// Registra un nuevo usuario en la aplicación
        /// </summary>
        /// <param name="userId">Id del usuario registrado</param>
        /// <param name="companyId"></param>
        /// <param name="name">Nombre del usuario registrado</param>
        /// <param name="lastName1">Primer apellido de un usuario registrado</param>
        /// <param name="lastName2">Segundo apellido de un usuario registrado</param>
        /// <param name="login">Login del usuario registrado</param>
        /// <param name="password">Password del Usuario registrado</param>
        /// <param name="email">Email del usuario registrado</param>
        /// <returns>Devuelve si el usuario se registró o no</returns>
        public bool InsertNewUser(int userId, int companyId, string name, string lastName1, string lastName2,string login, string password, string email)
        {
            return UserDataManager.GetInstance().InsertNewUser(userId, companyId, name, lastName1, lastName2, login, password, email);
        }

        /// <summary>
        /// Obtiene un usuario a partir de un md5
        /// </summary>
        /// <param name="md5">MD5 que representa el codigo del usuario</param>
        /// <returns>Usuario de la base de datos, null si no existe</returns>
        public LasUser GetUser(string md5)
        {
            return UserDataManager.GetInstance().GetUser(md5);
        }

        /// <summary>
        /// Verifica si el login del usuario es valido, es decir no existen otros con el mismo login
        /// </summary>
        /// <param name="login">Usuario con su login</param>
        /// <returns>Usuario de la base de datos, null si no existe</returns>
        public bool ValidUser(string login)
        {
            return UserDataManager.GetInstance().ValidUser(login);
        }

        /// <summary>
        /// Metodo que permite obtener una dirección a partir de un identificador de usuario
        /// </summary>
        /// <returns>Direccion que se deseaba obtener</returns>
        public Address GetAddress(int userId)
        {
            return UserDataManager.GetInstance().GetAddress(userId);
        }
        #endregion
    }
}
